package com.example.docmanagement.dto.request;


import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

@Data
@Schema(description = "文档查询请求（支持分页、筛选、搜索、排序）")
public class CustomerQueryRequest {


    /**
     * 当前页码（可选）
     * 从1开始计数
     * 默认值：1
     * 示例：2（表示第二页）
     */
    @Schema(description = "当前页码", example = "1", defaultValue = "1", minimum = "1")
    private Integer page = 1;

    /**
     * 每页显示数量（可选）
     * 控制每页返回的文档数量
     * 默认值：10
     * 建议范围：1-100
     * 示例：20
     */
    @Schema(description = "每页显示数量", example = "10", defaultValue = "10", minimum = "1", maximum = "100")
    private Integer pageSize = 10;

    /**
     * 客户状态筛选（可选）
     * 只返回指定状态的文档
     * 可选值：
     * - "active": 正常
     * - "inactive": 已禁用
     * 为空则返回所有状态的客户
     */
    @Schema(description = "客户状态筛选", example = "active", allowableValues = { "active", "inactive" })
    private String status;

    /**
     * 搜索关键词（可选）
     * 在客户名称、邮箱、手机号中搜索包含该关键词的文档
     * 支持模糊匹配
     * 示例："张三"
     * 为空则不进行关键词搜索
     */
    @Schema(description = "搜索关键词（支持模糊匹配）", example = "张三")
    private String keyword;

    /**
     * 排序字段（可选）
     * 指定按哪个字段排序
     * 可选值：
     * - "createdAt": 创建时间（默认）
     * - "updatedAt": 更新时间
     * - "name": 名称（字母顺序）
     * - "email": 邮箱（字母顺序）
     * - "phone": 手机号（字母顺序）
     * - "status": 状态
     * 默认值："createdAt"
     */
    @Schema(description = "排序字段", example = "createdAt", allowableValues = { "createdAt", "updatedAt", "name",
            "email", "phone", "status" }, defaultValue = "createdAt")
    private String sortBy = "createdAt";

    /**
     * 排序方向（可选）
     * 指定升序还是降序排列
     * 可选值：
     * - "asc": 升序（从小到大、从旧到新）
     * - "desc": 降序（从大到小、从新到旧，默认）
     * 默认值："desc"
     */
    @Schema(description = "排序方向", example = "desc", allowableValues = { "asc", "desc" }, defaultValue = "desc")
    private String sortOrder = "desc";
}
